Skip to main content

Коллоквиум №2

Типы задач на коллоквиум №2

Все задачи можно решать с использованием: аннотаций JPA (как в примере 2.3 Объектно-реляционное отображение (ORM), Hibernate), либо формата hbm.xml (Hibernate или NHibernate), либо .NET Entity Framework

ФайлИзменено
Файл worddavaf7a8aba7c473e6bd978684e79b0bf3c.emf imported from a Word document

| PNG-файл Class Model.png |

| Текстовый файл hqlsql.txt |

| Текстовый файл mapping.txt |

| Текстовый файл hierarchy_sample.txt |

| Текстовый файл locking.txt |

| Файл er.erwin |

| Файл hierarchy.erwin |

| Файл locking.erwin |

| Текстовый файл opt_pess_locking.txt |

| Текстовый файл class_hierarchy_sql.txt |

| Текстовый файл hql_queries.txt |

| PNG-файл ER_Hierarchy.png |

| PNG-файл ER_locking.png |

  1. Задачи на отображение иерархии классов в реляционную модель.​

Дана объектная модель в виде UML диаграммы классов. Требуется спроектировать реляционную модель и написать HQL запросы для выборки всех объектов базового класса и одного из дочерних классов. Также написать SQL-запросы, в которые будут транслироваться HQL запросы.
Всего рассматривается 3 типа отображений иерархий:

  • Single Table
  • Table Per Class
  • Table Per Concrete Class

Прочитать про них можно в любой книге, или документации по ORM-библиотекам, например, по ссылке http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html#inheritance-strategies
Пример иерархии:

2. Задачи на оптимистическую и пессимистическую блокировки для отсоединенной модели.​

Данные в заданной таблице может менять множество клиентов одновременно в режиме отсоединенной модели. Требуется предложить решение, позволяющее обнаруживать (оптимистическая) или предотвращать (пессимистическая блокировка) конфликты обновления строк таблицы без или с возможностью изменения структуры таблицы. Написать SQL запросы SELECT и UPDATE для демонстрации подхода.
Для решения задач можно использовать подходы:

  1. Оптимистическая блокировка с проверкой всех полей (update set name=:new_name where id=:id and name=:old_name and …)
  2. Оптимистическая блокировка с добавлением столбца версии или даты последнего обновления (update version = version + 1 where id=:id and version=:version)
  3. Пессимистическая блокировка с добавлением столбцов (кто и когда заблокировал)

3. Задачи на HQL-запросы​

Дана объектная схема и соответствующая ей реляционная схема. Напишите запрос на языке HQL и его аналог на SQL.
Все запросы на HQL в этих задачах строятся на основе "точечной нотации" связей ManyToOne.
Например, from CatalogItem as item where item.author.name like :name (для схемы описанной в примере)
Раскрываются в SQL при помощи inner join c соответствующими условиями объединений. SQL можно посмотреть, запустив пример.

4. Задачи на проектирование ER-схемы и маппинга​

По заданной объектной модели, спроектируйте схему базы данных и Hibernate маппинг в виде XML или аннотаций (атрибутов)
Все схемы – состоят из двух сущностей, связанных OneToMany. Требуется нарисовать соответствующую ER-схему со связью и маппинг (OneToMany с одной стороны, ManyToOne с другой – см. пример Catalog/CatalogItem)